package org.dicr.util.jds.conn;

import org.dicr.util.jds.*;

/***********************************************************************************************************************
 * DataStore URL
 * 
 * @author Igor A Tarasov me@dicr.dn.ua
 * @version 020111
 **********************************************************************************************************************/
public class DataStoreURL {
	private String url = null;

	private boolean local = true;

	private String server = null;

	private String file = null;

	/*******************************************************************************************************************
	 * Конструктор
	 ******************************************************************************************************************/
	public DataStoreURL() {
		super();
	}

	/*******************************************************************************************************************
	 * Конструктор
	 * 
	 * @param theUrl URL
	 ******************************************************************************************************************/
	public DataStoreURL(String theUrl) {
		this.url = theUrl;
		updateComponents();
	}

	/*******************************************************************************************************************
	 * Конструктор
	 * 
	 * @param theLocal true if local
	 * @param theServer server name
	 * @param theFile file name
	 ******************************************************************************************************************/
	public DataStoreURL(boolean theLocal, String theServer, String theFile) {
		this.local = theLocal;
		this.server = theServer != null ? theServer : "server.net";
		this.file = theFile != null ? DataStoreUtils.checkDataFileName(theFile) : "datafile.jds";
		updateURL();
	}

	/*******************************************************************************************************************
	 * Разбирает URL по компонентам
	 ******************************************************************************************************************/
	private void updateComponents() {
		this.local = true;
		this.server = "server.net";
		this.file = "datafile.jds";
		if (this.url == null || !this.url.startsWith("jdbc:borland:")) return;
		String tmp = this.url.substring(13);
		if (tmp.startsWith("dslocal:")) {
			this.local = true;
			this.file = tmp.substring(8);
			return;
		}
		if (tmp.startsWith("dsremote://")) {
			this.local = false;
			tmp = tmp.substring(11);
			int index = tmp.indexOf("/");
			if (index > 0) {
				this.server = tmp.substring(0, index);
				this.file = tmp.substring(index + 1);
				return;
			}
			this.server = tmp;
			return;
		}
	}

	/*******************************************************************************************************************
	 * Собирает url по компонентам
	 ******************************************************************************************************************/
	private void updateURL() {
		this.url = "jdbc:borland:" + (this.local ? "dslocal:" : "dsremote://" + this.server + "/") + this.file;
	}

	/*******************************************************************************************************************
	 * Возвращает URL
	 * 
	 * @return URL
	 ******************************************************************************************************************/
	public String getURL() {
		return this.url;
	}

	/*******************************************************************************************************************
	 * Устанавливает URL
	 * 
	 * @param theUrl URL
	 ******************************************************************************************************************/
	public void setURL(String theUrl) {
		this.url = theUrl != null ? theUrl : "jdbc:borland:dsremote://server.net/datafile.jds";
		updateComponents();
		updateURL();
	}

	/*******************************************************************************************************************
	 * Возвращает признак локально/удаленно
	 * 
	 * @return true if local
	 ******************************************************************************************************************/
	public boolean isLocal() {
		return this.local;
	}

	/*******************************************************************************************************************
	 * Устанавливает признак локально/удаленно
	 * 
	 * @param theLocal true if local
	 ******************************************************************************************************************/
	public void setLocal(boolean theLocal) {
		this.local = theLocal;
		updateURL();
	}

	/*******************************************************************************************************************
	 * Возвращает сервер подключения
	 * 
	 * @return server name
	 ******************************************************************************************************************/
	public String getServer() {
		return this.server;
	}

	/*******************************************************************************************************************
	 * Устанавливает сервер
	 * 
	 * @param theServer server name
	 ******************************************************************************************************************/
	public void setServer(String theServer) {
		this.server = theServer != null ? theServer : "server.net";
		updateURL();
	}

	/*******************************************************************************************************************
	 * Возвращает файл подключения
	 * 
	 * @return file name
	 ******************************************************************************************************************/
	public String getFile() {
		return this.file;
	}

	/*******************************************************************************************************************
	 * Устанавливает файл
	 * 
	 * @param theFile file name
	 ******************************************************************************************************************/
	public void setFile(String theFile) {
		String dsFile = theFile != null ? theFile : "datafile.jds";
		this.file = DataStoreUtils.checkDataFileName(dsFile);
		updateURL();
	}
}
